<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Google Web Toolkit</title>
        <meta name="gwt:module" content="com.gwt.MonApplication" />
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>Applicatif,GWT</keywords>
        <author>Frédéric BIESSE</author>
    </head>
    <body>
        <div class="chapter">
            <h2>Introduction</h2>
            <p>
                Il y a quelques temps, Google sortait le Google Web Toolkit (GWT), un framework Java de création d'applications web générant de l'
                <abbr title="Asynchronous JavaScript and XML">AJAX</abbr>
                à partir d’un code Java. Ce framework met ainsi à la portée des développeurs Java n'ayant pas le temps (ou l'envie) d'apprendre le Javascript une solution performante.
            </p>
            <p>
                En effet, un générateur de code parse les contrôles Java, les listeners afin de générer le code HTML et Javascript adéquat. L’avantage de cette solution est qu’un développeur Java gardera toutes ses habitudes de codage sans avoir à se soucier des incompatibilités qu’il peut y avoir entre les différents navigateurs (plusieures versions étant générées pour les navigateurs les plus utilisés, tel Firefox, Internet Explorer, Opera... y compris pour l'iPhone) pour concevoir son site web. Par ailleurs, ce framework est utilisé dans des applications de Google tel
                <a href="http://www.google.com/reader" target="_blank">Google Reader</a>
                .
            </p>
        </div>
        <div class="chapter">
            <h2>Application d'exemple</h2>
            <div class="subChapter">
                <h3>Installation du framework</h3>
                <p>
                    Le Google Web Toolkit, sous licence Apache 2.0, est téléchargeable sur le
                    <a target="_blank" href="http://code.google.com/webtoolkit/">site officiel</a>
                    du projet.
                </p>
            </div>
            <div class="subChapter">
                <h3>Création d'un nouveau projet</h3>
                <p>
                    Pour utiliser
                    <abbr title="Google Web Toolkit">GWT</abbr>
                    , il faut extraire l’archive, dans ce dossier, créer un dossier de projet, ouvrir une console, puis se positionner dans le dossier de projet.
                </p>
                <p>Afin de créer un projet pour Eclipse, il suffit de saisir les commandes suivantes :</p>
            </div>
            <p>Pour créer un projet :</p>
            <div class="subChapter">
                <span class="cmd_line">..\projectCreator -eclipse nomDeMonProjet</span>
                <br />
            </div>
            <p>Pour créer une application web :</p>
            <div class="subChapter">
                <span class="cmd_line">..\applicationCreator -eclipse nomDeMonProjet com.gwt.client.MonApplication</span>
                <br />
            </div>
            <p>Puis, d’importer le projet normalement avec Eclipse.</p>
            <p>
                Pour plus de confort, vous pouvez télécharger un plugin pour
                <a href="http://www.cypal.in/studio" target="_blank">Eclipse</a>
                , ou pour
                <a href="https://gwt4nb.dev.java.net/" target="_blank">Netbeans</a>
                .
            </p>
            <p>
                Et afin de pouvoir prévisualiser le résultat dans Eclipse, ajoutez la librairie
                <abbr title="Google Web Toolkit">GWT</abbr>
                : gwt-dev-windows.jar ou équivalent si vous n’êtes pas sous Windows.
            </p>
        </div>
        <div class="chapter">
            <h3>Code source d'un "Hello World"</h3>
            <p>Une application « Hello World » a été créé dans la classe com.gwt.client.MonApplication, cette classe ressemble à ceci :</p>
            <textarea name="code" class="java">package com.gwt.client;
				import com.google.gwt.core.client.EntryPoint;
				import com.google.gwt.user.client.ui.Button;
				import com.google.gwt.user.client.ui.ClickListener;
				import com.google.gwt.user.client.ui.Label;
				import com.google.gwt.user.client.ui.RootPanel;
				import com.google.gwt.user.client.ui.Widget;
				/**
				* Entry point classes define onModuleLoad().
				*/
				public class MonApplication implements EntryPoint {
				public void onModuleLoad() {
				final Button button = new Button("Click me");
				final Label label = new Label();
				button.addClickListener(new ClickListener() {
				public void onClick(Widget sender) {
				if (label.getText().equals(""))
				{
				label.setText("Hello World!");
				}
				else
				{
				label.setText("");
				}
				}
				});
				RootPanel.get("slot1").add(button);
				RootPanel.get("slot2").add(label);
				}
				}</textarea>
            <p>Un document HTML correspondant a été créé, il a globalement cette structure :</p>
            <textarea name="code" class="html">
                Wrapper HTML for MonApplication
                <script language="javascript" src="gwt.js" />
                <span id="slot1" />
                <span id="slot2" />
            </textarea>
            <p>
                Le résultat en exécution est disponible
                <a target="_blank" href="http://www.myjavaserver.com/~fredo/hellogwt/MonApplication.html">sur cette page</a>
                .
            </p>
            <p>Comme on le voit dans le code HTML, on a un élément d’id slot1 et un élément slot2; les deux étant référencés dans le code Java, comme les conteneurs d’un bouton et d’un label, dont les événements sont gérés par des listeners.</p>
            <p>
                Pour exécuter le projet sans Eclipse, il est possible de lancer le binaire
                <b>MonApplication-shell</b>
                .
            </p>
            <p>
                Dans tous les cas, pour créer le fichier Javascript et les fichiers nécessaire à l’exécution dans un serveur d’application, il faut lancer le binaire
                <b>MonApplication-compile</b>
                .
            </p>
            <p>
                Pour exécuter le projet en local, il suffit de cliquer sur le bouton "run" d’Eclipse, et spécifier la mainclass :
                <b>com.google.gwt.dev.GWTShell</b>
                pour le projet courant, mais dans un cadre autre que le développement, un serveur d’application tel que Tomcat sera nécessaire.
            </p>
        </div>
        <div class="chapter">
            <h2>
                Possibilités offertes par le
                <abbr title="Google Web Toolkit">GWT</abbr>
            </h2>
            <p>
                Le Google Web Toolkit est intéressant à plus d'un titre. En effet, en plus d'apporter l'utilisation d'AJAX à des développeurs Java, la combinaison de ce framework avec d'autres
                <abbr title="Application Programming Interface">API</abbr>
                s de Google, comme Google Gears, multiplie les possibilités de créer des interfaces riches utilisables aussi hors-ligne ! (
                <a href="http://wiki.apexdevnet.com/index.php/Building_Offline_Salesforce_Applications_with_Google_Gears_and_Google_Web_Toolkit" target="_blank">example</a>
                )
            </p>
            <p />
        </div>
    </body>
</html>

